package com.itdct.onflow.core.context

import com.baomidou.mybatisplus.extension.plugins.pagination.Page
import com.itdct.onflow.core.dto.ApiParamDTO
import com.itdct.onflow.core.dto.BaseLoginDTO
import com.itdct.onflow.core.vo.RespVo
import jakarta.servlet.http.HttpServletRequest
import jakarta.servlet.http.HttpServletResponse
import java.lang.reflect.Method

/**
 * @author Zhouwx
 * @date 2025/7/20 12:14:00
 * @version 1.0
 * @description
 */
open class BaseContext<AccountEntity : Any, LoginDTO : BaseLoginDTO<AccountEntity>> {
    // INFO: Zhouwx: 2025/7/20 请求相关
    /**
     * 整个接口uri
     * /admin/example/add.adw
     */
    var requestUri = ""

    /**
     * 请求ip地址
     */
    var ipAddress = ""

    /**
     * 请求模块名，也就是中间的example
     */
    var requestModuleName = ""

    /**
     * 请求获取时间
     */
    var receiveTime: Long = 0

    /**
     * 接口请求
     */
    var request: HttpServletRequest? = null

    /**
     * 请求头
     */
    var requestHeadMap = HashMap<String, String>()

    /**
     * 请求体
     */
    var requestBody = ""

    /**
     * 请求的uuid，如果为空则随机一个
     */
    var requestUuid = ""

    /**
     * 请求时的contentType
     */
    var requestContentType = ""

    /**
     * 请求的api，例如：add.adw
     */
    var requestApi = ""

    /**
     * 请求表单信息
     */
    var qo: Any? = null

    /**
     * 平台类型
     */
    var clientType = ""

    /**
     * 接口版本
     */
    var interfaceVersion = ""

    /**
     * 请求的方法名
     */
    var methodName: String? = null

    /**
     * 请求引用的方法
     */
    var method: Method? = null

    /**
     * Controller类信息
     */
    var controllerClass: Class<*>? = null

    /**
     * Controller模块名
     */
    var controllerModuleName: String? = null

    // INFO: Zhouwx: 2025/7/20 响应相关
    /**
     * 接口响应
     */
    var response: HttpServletResponse? = null

    /**
     * 响应体
     */
    var responseBody = ""

    /**
     * 响应头
     */
    var responseHeadMap = HashMap<String, String>()

    /**
     * 回复参数
     */
    var respVo: RespVo<*>? = null

    /**
     * 完成时间
     */
    var finishTime: Long = 0

    /**
     * 接口总耗时
     */
    var totalUseTime: Long = 0

    // INFO: Zhouwx: 2025/7/20 分页相关
    /**
     * 是否开启分页，默认为false，消费完page后改回为false
     */
    var startPage: Boolean = false

    /**
     * 仅分页接口有效，获取分页信息
     */
    var page: Page<*>? = null

    /**
     * 是否是涉及到分页的返回，启动过一次startPage，这个值就为true
     */
    var pageableReturn: Boolean = false

    // INFO: Zhouwx: 2025/7/20 登录相关
    /**
     * 登录的token信息
     */
    var token: String? = null

    /**
     * 登录信息
     */
    var loginDTO: LoginDTO? = null

    /**
     * 当前请求的账号id
     */
    var accountId: Long? = null

    /**
     * 当前请求的账号名称
     */
    var accountName: String? = null

    /**
     * 当前请求的账号实体
     */
    var accountEntity: AccountEntity? = null

    // INFO: Zhouwx: 2025/8/25 权限相关
    /**
     * 是否为超级管理员，这个值确定了多个筛选条件的权限控制
     */
    var superAdmin = false


    // INFO: Zhouwx: 2025/7/20 额外数据
    /**
     * 接口额外参数信息
     */
    val apiParamDTO = ApiParamDTO()

    /**
     * 自定义map，可以放一些自定义数据什么的
     */
    var extraParam: HashMap<String, Any> = HashMap()

}
